use ssh2::Session;
use std::net::TcpStream;
use std::io::Read;
use log::info;

/// 异步函数，用于通过 SSH 获取远程版本号
pub async fn fetch_remote_version() -> Option<String> {
    // 创建 TCP 连接
    let tcp = TcpStream::connect("192.168.1.10:22").ok()?;
    let mut session = Session::new().ok()?;
    session.set_tcp_stream(tcp);
    session.handshake().ok()?;

    // 使用用户名和密码进行认证
    session.userauth_password("root", "orangepi").ok()?;

    // 检查认证是否成功
    if !session.authenticated() {
        info!("SSH authentication failed");
        return None;
    }

    // 执行命令
    let mut channel = session.channel_session().ok()?;
    channel.exec("/usr/local/bin/orangepi-cli version").ok()?;

    // 读取命令输出
    let mut output = String::new();
    channel.read_to_string(&mut output).ok()?;
    channel.wait_close().ok()?;

    // 解析版本号
    if let Some(version_line) = output.lines().find(|line| line.contains("version")) {
        return version_line.split_whitespace().last().map(|v| v.to_string());
    }

    None
}
